import os
import sys

# 思路： 模拟链表，l,r为左右节点，vis记录节点是否被删除
import heapq

heap=[]
N,K=map(int,input().split())

num=[i for i in map(int,input().split())]
#存储每个元素的左边相邻元素的索引
l=[0]*N
#存储每个元素的右边相邻元素的索引
r=[0]*N
#标记元素是否已经被删去
vis=[0]*N
# 建堆
for i in range(N):
    #将每个元素及其下标压入堆中
    heapq.heappush(heap,(num[i],i))
    #最小值的左边下标
    l[i]=i-1
    #最小值的右边下标
    r[i]=i+1

#对边界元素的左右相邻索引进行初始化，表示没有左边或者右边的元素
#边界条件：l[0]--第1个元素没有左边的元素，r[N-1]表示最后一个元素没有右边的元素
l[0],r[N-1]=-1,-2

#处理K次操作
while K>0:
    #取最小值及其下标
    min_x,i=heapq.heappop(heap)
    #堆中的值和当前数组中的值不一致，当前堆中的值已经过时
    if num[i]!=min_x:
        #将当前值重新插入堆中
        heapq.heappush(heap,(num[i],i))
        #当前值不同就不再执行下面的语句
        continue
    #若值一致，则进行删除操作
    #删除的是第1个元素
    if l[i]==-1 and r[i]!=-2:
        #将右边元素加上被删除元素的值
        num[r[i]]+=num[i]
        #更新右边元素的左侧索引为-1，表示其现在是新的头部
        l[r[i]]=-1
    #删除的是最后一个元素
    elif r[i]==-2 and l[i]!=-1:
        #将左侧元素+被删除的值
        num[l[i]]+=num[i]
        #更新左侧元素的右侧索引，表示其为新的尾部元素
        r[l[i]]=-2
    #删除的是中间元素
    else:
        #将左侧元素+被删除的值
        num[l[i]]+=num[i]
        #将右侧元素+被删除的值
        num[r[i]]+=num[i]  #更新当前右边
        #更新左侧元素的右索引为前对元素的右索引
        r[l[i]]=r[i]
        #更新右侧元素的左索引为当前元素的左索引
        l[r[i]]=l[i]
    #标记当前元素已被删除
    vis[i]=1
    #操作次数-1
    K-=1
for i in range(N):
    if vis[i]!=1:
        print(num[i],end=" ")